#pragma once
#include <memory>
#include <vector>
#include "order.h"
#include "trade.h"

class IOrderHandler {
public:
    virtual ~IOrderHandler() = default;
    virtual void processBatch(const std::vector<Order>& orders) = 0;
    virtual void adjustBatchSize() = 0;
};

class IStateManager {
public:
    virtual ~IStateManager() = default;
    virtual void saveState() = 0;
    virtual bool restoreState() = 0;
};

class ICallbackDispatcher {
public:
    virtual ~ICallbackDispatcher() = default;
    virtual void registerCallback(std::shared_ptr<OrderCallback> callback) = 0;
    virtual void notifyOrderStatus(const Order& order, OrderStatus status) = 0;
    virtual void notifyTrade(const Trade& trade) = 0;
    virtual void notifyError(const OrderError& error) = 0;
};